// 封装购物车模块

import { defineStore } from 'pinia'
import { ref ,computed} from 'vue'
//导入useUserStore
import { useUserStore } from './user'
//使用EleMessage提示添加购物车成功
import { ElMessage } from 'element-plus'
// 导入购物车相关接口
import { insertCartAPI,findNewCartListAPI, deleteCartAPI } from '@/apis/cart'

export const useCartStore = defineStore('cart', () => {
  //定义userStore
  const userStore = useUserStore()
  // 判断是否登录的状态
  const isLogin = computed(() => userStore.userInfo.token)
  // 1. 定义state - cartList
  const cartList = ref([])

  // 2. 定义action - addCart 
     const addCart = async(goods) => {
     const {skuId,count} = goods
    if(isLogin.value){
              //添加数据到购物车中
            await insertCartAPI({skuId,count})
             // 获取最新的购物车列表
           updateCart()
      
             //使用EleMessage提示添加购物车成功
             ElMessage({
                 message: '添加购物车成功',
                  type: 'success',
              })
       }else{
  console.log('添加', goods)
  // 添加购物车操作
  // 已添加过 - count + 1
  // 没有添加过 - 直接push
  console.log(goods.skuId);
  // 思路：通过匹配传递过来的商品对象中的skuId能不能在cartList中找到，找到了就是添加过
  const item = cartList.value.find(cartItem => goods.skuId === cartItem.skuId);
    console.log(item);
   if(item){
   //找到该商品后
     item.count++
     }
   else{
      cartList.value.push(goods)
     }
//使用EleMessage提示添加购物车成功
   ElMessage({
    message: '添加购物车成功',
    type: 'success',
   })
}
  }

  //3.删除购物车
  const delCart=async (skuId)=>{
     if(isLogin.value){
      //封装删除接口
      await deleteCartAPI([skuId])
      updateCart()
        ElMessage({
          message: '删除成功',
          type: 'success',
        })
     }else{
       //使用splice
      //使用filter方法
      const index=cartList.value.findIndex((item)=>skuId===item.skuId)
      cartList.value.splice(index,1)
      //使用fliter方法
      // 使用 filter 方法移除特定 skuId 的项
      // cartList.value = cartList.value.filter(item => item.skuId !== skuId);
      //使用EleMessage提示删除成功
      ElMessage({
        message: '删除成功',
        type: 'success',
      })
     }
  }
  //封装更新数据接口
  const updateCart=async ()=>{
     // 获取最新的购物车列表
     const res= await findNewCartListAPI()
     cartList.value = res.result
  }
  //4.退出登录清除购物车功能
const cartClear=()=>{
    cartList.value=[]
}
  //单选功能
  const singleCheck=(skuId,selected)=>{
    //   通过传来的skuid来查找具体需要需改哪一项的选中状态
    const item=cartList.value.find((item)=>skuId===item.skuId)
    item.selected=selected
  }
//   全选功能
const allCheck=(selected)=>{
    //将cartList中的每一项的selected都改为selected
    cartList.value.forEach((item)=>item.selected=selected)
}

//计算属性
// 1.计算商品的总数量
const allCount = computed(() => {
    return cartList.value.reduce((total, item) => total + item.count, 0)
  })
// 2.计算商品的总价格
const allPrice = computed(() => {
    return cartList.value.reduce((total, item) => total + item.count * item.price, 0)
})
//是否全选
const isAll = computed(() => {
    return cartList.value.every((item) => item.selected)
})
//已选择数量
const selectedCount = computed(() => {
  return cartList.value.filter((item)=>item.selected).reduce((total,item)=> total+item.count,0)
})
//已经选择商品价钱合计
const selectedPrice = computed(() => {
  return cartList.value.filter((item)=>item.selected).reduce((total,item)=> total+item.count*item.price,0)
})
  return {
    cartList,
    addCart,
    delCart,
    allCount,
    allPrice,
    singleCheck,
    isAll,
    allCheck,
    selectedCount,
    selectedPrice,
    cartClear,
    updateCart
  }
}, {
  persist: true,//开启store持久化 购物车同步到本地
})